package com.homework.dao;

import java.sql.ResultSet;
import java.sql.SQLException;

import com.homework.bean.PageInfoBean;

public class PageInfoDao {

	private static PageInfoDao pageInfoDao = null;

	// 一页显示的记录数 （自定）
	private int intPageSize = 0;
	// 记录总数 (通过数据库查询取得)
	private int intRowCount = 0;
	// 总页数 （由intRowCount计算而得）
	private int intPageCount = 0;
	// 当前页码
	private int intPage = 0;
	// 当前页显示的记录数
	private int num = 0;
	private ResultSet rs;

	public static PageInfoDao getInstance() {
		if (pageInfoDao == null) {
			pageInfoDao = new PageInfoDao();
		}
		return pageInfoDao;
	}

	public void setPageInfoBean(PageInfoBean pageInfoBean) throws SQLException {
		intPageSize = pageInfoBean.getIntPageSize();
		intRowCount = pageInfoBean.getIntRowCount();
		intPageCount = pageInfoBean.getIntPageCount();
		intPage = pageInfoBean.getIntPage();
		num = pageInfoBean.getNum();
		rs = pageInfoBean.getRs();

		// --------------分页基本参数获取---------------
		// 1.置一页显示的记录数intPageSize
		if (intPageSize == 0) {// 该判断用于设置不同的intPageSize，当有值则不设置默认值
			intPageSize = 8;
		}

		// 2.获取intPage
		if (intPage < 1) // 在第一页，执行“上一页”时，还是放回第一页
			intPage = 1;

		// 3.获取总记录数intRowCount
		rs.last();// 光标在最后一行
		intRowCount = rs.getRow();// 获得当前行号 ，及总记录数

		// 4.记算总页数 intPageCount
		intPageCount = (intRowCount + intPageSize - 1) / intPageSize;
		if (intPageCount == 0) { // 当总记录为零时，总页数认为也有一页
			intPageCount = 1;
		}

		// 5.调整当前页码 intPage
		if (intPage > intPageCount) {// 在最后一页时，执行“下一页”，还是返回最后一页
			intPage = intPageCount;
		}
		// 6.将记录指针定位到待显示页的第一条记录上
		if (intPageCount > 0) { // 有记录的时候
			rs.absolute((intPage - 1) * intPageSize + 1);
		}
		// 7.确定当前页记录数num
		if (intPage == intPageCount) {
			num = intRowCount - (intPage - 1) * intPageSize;
		} else if (intPage < intPageCount) {
			num = intPageSize;
		}

		// 设置pageInfoBean
		pageInfoBean.setIntPageSize(intPageSize);
		pageInfoBean.setIntRowCount(intRowCount);
		pageInfoBean.setIntPageCount(intPageCount);
		pageInfoBean.setIntPage(intPage);
		pageInfoBean.setNum(num);
	}

}
